Presto একটি ডিস্ট্রিবিউটেড SQL কোয়েরি ইঞ্জিন যা ডেটাবেস, ডেটা ফাইল সিস্টেম, এবং বিভিন্ন ডেটা সোর্স থেকে দ্রুত ডেটা এক্সট্র্যাক্ট এবং বিশ্লেষণ করার জন্য ব্যবহৃত হয়। Presto তে API ব্যবহার করে কোয়েরি এক্সিকিউশন এবং ফলাফল প্রাপ্তি একটি সাধারণ এবং শক্তিশালী পদ্ধতি হতে পারে, বিশেষ করে যখন আপনি প্রোগ্রাম্যাটিক্যালি (যেমন পাইটন, জাভা, বা অন্য যেকোনো প্রোগ্রামিং ভাষা ব্যবহার করে) Presto সার্ভারে কোয়েরি পাঠাতে চান।
Presto API একটি RESTful API যা JSON ফর্ম্যাটে কোয়েরি এক্সিকিউশনের ফলাফল প্রদান করে। এই API ব্যবহার করে আপনি Presto সার্ভারে কোয়েরি পাঠাতে, এক্সিকিউট করতে এবং ফলাফল রিটার্ন করতে পারেন।
Presto API তে REST API পদ্ধতি ব্যবহৃত হয় এবং এটি কোয়েরি এক্সিকিউশন, রেজাল্ট ফেচিং এবং কোয়েরি স্টেটাস ট্র্যাক করার জন্য একটি পরিষ্কার ইন্টারফেস প্রদান করে।
Presto API তে প্রধানত দুটি HTTP রিকোয়েস্ট টাইপ ব্যবহার করা হয়:
API Endpoint:
Presto সার্ভারে কোয়েরি এক্সিকিউশন এবং ফলাফল ফেচ করার জন্য আপনাকে Presto Coordinator Node এর HTTP সার্ভারে রিকোয়েস্ট পাঠাতে হবে। সাধারণত Presto সার্ভারের URL এর মতো:http://<coordinator-ip>:8080/v1/statement
Presto API ব্যবহার করে কোয়েরি এক্সিকিউট করার জন্য HTTP POST রিকোয়েস্ট পাঠানো হয়, যেখানে কোয়েরি পাঠানো হয় এবং কোয়েরি এক্সিকিউশনের জন্য প্রস্তুত করা হয়।
কোয়েরি এক্সিকিউট করার জন্য নিচের মত একটি POST রিকোয়েস্ট পাঠানো হয়:
URL:
POST http://<coordinator-ip>:8080/v1/statement
Body (Request):
{
"query": "SELECT * FROM hive.default.orders WHERE order_status = 'shipped'"
}
এই রিকোয়েস্টে:
Headers:
Content-Type: application/json
এটি সফলভাবে কোয়েরি এক্সিকিউট হলে, একটি 200 OK
রেসপন্স কোড ফেরত দেয় এবং কোয়েরি এক্সিকিউশনের জন্য id
সহ একটি রেসপন্স প্রদান করা হয়।
Example Response:
{
"id": "3e51a43d-f400-4209-9573-5458f7b1fbd1"
}
কোয়েরি এক্সিকিউট করার পরে, Presto API ব্যবহার করে কোয়েরি ফলাফল ফেচ করা যায়। কোয়েরি এক্সিকিউশন সম্পূর্ণ হলে, GET রিকোয়েস্ট ব্যবহার করে আপনি ফলাফল সংগ্রহ করতে পারেন।
Presto সার্ভারের v1/query/<query-id>/final
এ রিকোয়েস্ট পাঠাতে হয় যাতে কোয়েরির ফলাফল পাওয়া যায়।
URL:
GET http://<coordinator-ip>:8080/v1/query/3e51a43d-f400-4209-9573-5458f7b1fbd1
এখানে 3e51a43d-f400-4209-9573-5458f7b1fbd1
হল কোয়েরি এক্সিকিউশন আইডি যা POST রিকোয়েস্ট থেকে প্রাপ্ত হয়।
এটি সফলভাবে কোয়েরির ফলাফল ফিরিয়ে দেয়, যেখানে columns এবং data (ফলাফল রেকর্ড) প্রদান করা হয়।
Example Response:
{
"columns": [
{"name": "order_id", "type": "varchar"},
{"name": "customer_id", "type": "varchar"},
{"name": "order_status", "type": "varchar"}
],
"data": [
{"order_id": "12345", "customer_id": "6789", "order_status": "shipped"},
{"order_id": "12346", "customer_id": "6790", "order_status": "shipped"}
]
}
Presto তে যদি কোয়েরির ফলাফল খুব বড় হয়, তাহলে pagination ব্যবহার করা যেতে পারে, যা অনেক ফলাফলকে ছোট ছোট অংশে বিভক্ত করে। API থেকে paginated results পাওয়া গেলে, আপনাকে পরবর্তী ফলাফল পেতে nextToken
ব্যবহার করতে হতে পারে।
{
"columns": [
{"name": "order_id", "type": "varchar"},
{"name": "customer_id", "type": "varchar"},
{"name": "order_status", "type": "varchar"}
],
"data": [
{"order_id": "12345", "customer_id": "6789", "order_status": "shipped"}
],
"nextToken": "abc123"
}
এই ক্ষেত্রে, nextToken
ব্যবহার করে পরবর্তী ফলাফল পেতে API রিকোয়েস্ট করতে হবে।
Presto API কোয়েরি এক্সিকিউশনের সময় query-id
ব্যবহার করে স্ট্যাটাস এবং এর ফলাফল চেক করতে পারে। কোয়েরি এক্সিকিউশন যদি ব্যর্থ হয়, API আপনাকে ত্রুটির বার্তা প্রদান করবে।
{
"error": {
"message": "Failure while executing query",
"errorCode": "SYNTAX_ERROR",
"failureInfo": "Invalid SQL syntax"
}
}
এটি নির্দেশ করে যে কোয়েরির সঠিক SQL সিনট্যাক্স ছিল না, এবং ত্রুটির কোড সহ একটি বিস্তারিত বার্তা প্রদান করা হয়েছে।
Python ব্যবহার করে Presto API এর মাধ্যমে কোয়েরি এক্সিকিউট এবং ফলাফল ফেচ করার উদাহরণ:
import requests
import json
# Step 1: Execute the query
url = "http://<coordinator-ip>:8080/v1/statement"
headers = {"Content-Type": "application/json"}
query = {"query": "SELECT * FROM hive.default.orders WHERE order_status = 'shipped'"}
response = requests.post(url, headers=headers, data=json.dumps(query))
# Get query ID from the response
query_id = response.json()["id"]
print(f"Query ID: {query_id}")
# Step 2: Fetch the results
result_url = f"http://<coordinator-ip>:8080/v1/query/{query_id}"
result_response = requests.get(result_url)
# Check if the query finished
if "data" in result_response.json():
print("Query Results: ", result_response.json()["data"])
else:
print("Query still running, waiting for result...")
এই কোডের মাধ্যমে:
Presto API এর মাধ্যমে আপনি SQL কোয়েরি এক্সিকিউট এবং ফলাফল ফেচ করতে পারেন। POST রিকোয়েস্ট দিয়ে কোয়েরি এক্সিকিউট করা হয় এবং GET রিকোয়েস্ট ব্যবহার করে ফলাফল ফেচ করা হয়। API Error Handling এবং Pagination-এর মাধ্যমে আপনি বড় ডেটাসেটের ক্ষেত্রে কোয়েরি ফলাফল সহজে পরিচালনা করতে পারেন। Presto API এর মাধ্যমে কোয়েরি এক্সিকিউশন এবং ফলাফল প্রাপ্তি সহজ ও কার্যকরী একটি প্রক্রিয়া, যা প্রোগ্রাম্যাটিক্যালি ডেটাবেসের সাথে যোগাযোগের জন্য ব্যবহার করা যায়।
common.read_more